package com.lucifer.d.security.util;

import com.alibaba.fastjson.JSON;
import com.lucifer.d.util.RedisUtil;
import com.lucifer.d.util.RedissonUtil;
import com.lucifer.d.util.StringUtil;
import org.redisson.api.RedissonClient;
import org.springframework.data.redis.core.RedisTemplate;

/**
 * token解析
 *
 * @author Lucifer
 */
public class TokenDecode {

    public static <T> T tokenDecode(Class<T> clazz, String tokenPrefix, String token, RedisTemplate redisTemplate, Integer validTime) {
        if (StringUtil.isEmpty(token)){
            return null;
        }
        // 获取缓存中用户信息
        Object tokenMessage = RedisUtil.get(redisTemplate, tokenPrefix + token);
        if (tokenMessage == null) {
            return null;
        }
        String userMessage = (String) JSON.parse(JSON.toJSONString(tokenMessage));
        T value = JSON.parseObject(userMessage, clazz);
        // 有效时间换算
        Integer time = validTime * 24 * 60 * 60;
        // 刷新缓存有效时间
        RedisUtil.pushTime(redisTemplate, tokenPrefix + token, Long.valueOf(time));
        return value;
    }

    public static <T> T tokenDecode(Class<T> clazz, String tokenPrefix, String token, RedissonClient client, Integer validTime) {
        if (StringUtil.isEmpty(token)){
            return null;
        }
        // 获取缓存中用户信息
        Object tokenMessage = RedissonUtil.get(client, tokenPrefix + token);
        if (tokenMessage == null) {
            return null;
        }
        String userMessage = (String) JSON.parse(JSON.toJSONString(tokenMessage));
        T value = JSON.parseObject(userMessage, clazz);
        // 有效时间换算
        Integer time = validTime * 24 * 60 * 60;
        // 刷新缓存有效时间
        RedissonUtil.pushTime(client, tokenPrefix + token, Long.valueOf(time));
        return value;
    }

    public static <T> T signDecode(Class<T> clazz, String token, RedisTemplate redisTemplate, Integer validTime) {
        if (StringUtil.isEmpty(token)){
            return null;
        }
        // 获取缓存中用户信息
        Object tokenMessage = RedisUtil.get(redisTemplate, token);
        if (tokenMessage == null) {
            return null;
        }
        String userMessage = (String) JSON.parse(JSON.toJSONString(tokenMessage));
        T value = JSON.parseObject(userMessage, clazz);
//        // 有效时间换算
//        Integer time = validTime * 24 * 60 * 60;
//        // 刷新缓存有效时间
//        RedisUtil.pushTime(redisTemplate, token, Long.valueOf(time));
        return value;
    }

    public static <T> T signDecode(Class<T> clazz, String token, RedissonClient client, Integer validTime) {
        if (StringUtil.isEmpty(token)){
            return null;
        }
        // 获取缓存中用户信息
        Object tokenMessage = RedissonUtil.get(client, token);
        if (tokenMessage == null) {
            return null;
        }
        String userMessage = (String) JSON.parse(JSON.toJSONString(tokenMessage));
        T value = JSON.parseObject(userMessage, clazz);
//        // 有效时间换算
//        Integer time = validTime * 24 * 60 * 60;
//        // 刷新缓存有效时间
//        RedissonUtil.pushTime(client, token, Long.valueOf(time));
        return value;
    }

}
